########################################################################################
##  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING THIS SOFTWARE
##
##  By downloading, copying, installing or using the software you agree to this license.
##  If you do not agree to this license, do not download, install, copy or use the software.
##
## Copyright (C) 2013, AerVision Technologies Pty Ltd, all rights reserved.
##
## Redistribution and use in source and binary forms, with or without modification,
## are permitted provided that the following conditions are met:
##
##   * Redistribution's of source code must retain the above copyright notice,
##     this list of conditions and the following disclaimer.
##
##   * Redistribution's in binary form must reproduce the above copyright notice,
##     this list of conditions and the following disclaimer in the documentation
##     and/or other materials provided with the distribution.
##
##   * The name of AerVision Technologies, may not be used to endorse or promote products
##     derived from this software without specific prior written permission.
##
## This software is provided by the copyright holders and contributors to demonstrate 
## www.AerCloud.net Framework as a Service API (FaaS), "as is" and
## any express or implied warranties, including, but not limited to, the implied
## warranties of merchantability and fitness for a particular purpose are disclaimed.
## In no event shall the copyright holder or contributors be liable for any direct,
## indirect, incidental, special, exemplary, or consequential damages
## (including, but not limited to, procurement of substitute goods or services;
## loss of use, data, or profits; or business interruption) however caused
## and on any theory of liability, whether in contract, strict liability,
## or tort (including negligence or otherwise) arising in any way out of
## the use of this software, even if advised of the possibility of such damage.
########################################################################################

import os
import glob

from aercloudclient.utils.ImageData import ImageData
from aercloudclient.utils.Settings import Settings

class ImageCache():
    loadingImage = None
    
    @staticmethod
    def CacheDir():
        subDir = ""
        key = Settings.Default.AccessKey
        if key != None and key != "":
            subDir = key[0:4] + '/'
        path = os.getcwd() + "/ImageCache/" + subDir
        if not os.path.exists(path):
            os.makedirs(path)
        return path
        
    @staticmethod
    def FileName(personName, imageName):
        return ImageCache.CacheDir() + personName + "." + imageName + ".png"
        
    @staticmethod
    def Get(personName, imageName):
        fileName = ImageCache.FileName(personName, imageName)
        if os.path.exists(fileName):
            return ImageData(fileName)
        else:
            return None
    
    @staticmethod
    def Put(personName, imageName, data):
        if data == None:
            return
            
        fileName = ImageCache.FileName(personName, imageName)
        
        with open(fileName, "wb") as f:
            f.write(data.asPng())
            
    @staticmethod
    def Delete(personName, imageName=None):
        if imageName != None:
            fileName = ImageCache.FileName(personName, imageName)
            if os.path.exists(fileName):
                os.unlink(fileName)
        else:
            path = ImageCache.CacheDir()
            files = glob.glob(path + personName + '*')
            for f in files:
                os.unlink(f)
                
    @staticmethod
    def Exists(personName, imageName):
        fileName = ImageCache.FileName(personName, imageName)
        return os.path.exists(fileName)
        
    @staticmethod
    def Clear():
        path = ImageCache.CacheDir()
        if os.path.exists(path):
            files = glob.glob(path + "*")
            for f in files:
                os.unlink(f)
                
if __name__ == "__main__":
    pass
    